from typing import Any, Generic, Optional, TypeVar
from pydantic import BaseModel

T = TypeVar("T")

class ResponseData(BaseModel, Generic[T]):
    """响应数据模型"""
    code: int
    msg: str
    data: Optional[T] = None

class ResponseHandler:
    @staticmethod
    def parse_response(response_json: dict, data_model: Optional[type] = None) -> ResponseData:
        """
        解析响应数据
        :param response_json: 响应的JSON数据
        :param data_model: data字段的数据模型类(可选)
        """
        if data_model and response_json.get('data'):
            # 如果提供了数据模型，则使用该模型解析data字段
            # 暂时不能使用
            parsed_data = data_model.model_validate(response_json['data'])
            return ResponseData[data_model](
                code=response_json.get('code', -1),
                msg=response_json.get('msg', '未知错误'),
                data=parsed_data
            )
        else:
            # 否则直接返回原始数据
            return ResponseData(
                code=response_json.get('code', -1),
                msg=response_json.get('msg', '未知错误'),
                data=response_json.get('data')
            )

    @staticmethod
    def is_success(response_data: ResponseData) -> bool:
        """判断请求是否成功"""
        return response_data.code == 200

    @staticmethod
    def get_error_msg(response_data: ResponseData) -> str:
        """获取错误信息"""
        return response_data.msg 